/*
 *  Copyright © 2014 CIB Co.Ltd
 *  * All right reserved
 *  * Auther:jin xingwang
 *
 */

package com.jwts.common;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

/**
 * 功能
 * @author 靳兴旺
 * @version 1.0.0 2020-7-15
 * 工具类，根据规则生成token相应的有效时间
 */
public class FailureTimeUtils {

    /**
     * 根据规则生成指定的有效时间
     * @param failureTimeEnum 枚举类，选择设定的时间级别
     * @param jwtValidTime  设定有效时间数字
     * @return  有效时间的截至日期
     */
    public static LocalDateTime createValidTime(FailureTimeEnum failureTimeEnum, int jwtValidTime){
        LocalDateTime dateTime = LocalDateTime.now();
        if (failureTimeEnum.equals(FailureTimeEnum.SECOND)){
            return createBySecond(dateTime, jwtValidTime);
        }
        if (failureTimeEnum.equals(FailureTimeEnum.MINUTE)){
            return createBySecond(dateTime, jwtValidTime * 60);
        }
        if (failureTimeEnum.equals(FailureTimeEnum.HOUR)){
            return createBySecond(dateTime, jwtValidTime * 60 * 60);
        }
        if (failureTimeEnum.equals(FailureTimeEnum.DAY)){
            return getDateAfter(dateTime, jwtValidTime);
        }
        return null;
    }

    /**
     * 获取几天后的时间
     * @param dateTime 开始时间
     * @param day 天数
     * @return 距离开始时间指定天数后的时间
     */
    public static LocalDateTime getDateAfter(LocalDateTime dateTime, int day){
        return dateTime.plus(day, ChronoUnit.DAYS);
    }

    /**
     * 获取几天前的时间
     * @param dateTimeTime 开始时间
     * @param day 天数
     * @return 距离开始时间指定天数前的时间
     */
    public static LocalDateTime getDateBefore(LocalDateTime dateTimeTime, int day){
        return dateTimeTime.minus(day, ChronoUnit.DAYS);
    }

    /**
     * 获取指定秒数之后的时间
     * @param dateTime 开始时间
     * @param jwtVaildTime 秒数
     * @return 距离开始时间指定秒数后的时间
     */
    public static LocalDateTime createBySecond(LocalDateTime dateTime, int jwtVaildTime){
        return dateTime.plus(jwtVaildTime, ChronoUnit.SECONDS);
    }
}
